package com.demo.java.OD51_100.OD88;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import java.util.stream.Collectors;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【字母计数】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/145654636
 */
public class OdMain {
    public static void main(String[] args) {
        try {
            Scanner s = new Scanner(System.in);
            String inputStr = s.nextLine();  // 读取输入字符串
            Map<Character, Integer> charNumMap = new HashMap<>();  // 用于存储字符及其频次

            char[] wordChars = inputStr.toCharArray();
            // 统计每个字符的出现次数
            for (char c : wordChars) {
                charNumMap.put(c, charNumMap.getOrDefault(c, 0) + 1);
            }

            // 使用Stream进行排序
            List<Map.Entry<Character, Integer>> resultList = charNumMap.entrySet().stream()
                    .sorted((w1, w2) -> {
                        int num1 = w1.getValue();
                        int num2 = w2.getValue();
                        char char1 = w1.getKey();
                        char char2 = w2.getKey();
                        if (num1 != num2) {
                            return Integer.compare(num2, num1);  // 按频次降序排序
                        }
                        return Character.compare(char1, char2);  // 如果频次相同，按字符升序排序
                    }).collect(Collectors.toList());

            // 输出结果
            for (Map.Entry<Character, Integer> e : resultList) {
                System.out.print(e.getKey() + ":" + e.getValue() + ";");
            }
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("input error");
        }
    }
}